iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0

大家好!今天第五天,我們要來聊聊 JavaScript( JS)最核心的資料結構——物件(object),以及與原始型別不同的物件型別(object types)!


在介紹物件之前,先來探討何謂物件型別?

物件型別的定義

  • 物件型別:和原始資料類型(Primitive data types)不同,指描述物件的屬性及型別,其中,同為物件型別的有:物件(object)、函式(function)、陣列(Array)。

物件(object)

基本定義

  • 物件:像籃子一樣,盛裝了相關或相似結構的資料(類型),或是組成一個物件所需的資料。

宣告方式

//先宣告一個 student 物件,並直接在冒號後面加上型別
let student:{
	name: string;
	phoneNum: number; //定義型別時,屬性之間可以使用分號或逗號隔開
};

student = {
	name: "Judy",
	phoneNum: 123456789
};

//錯誤寫法 1 :
student = {
	name: "Judy",
	phoneNum: "123456789" //若將phoneNum的型別寫成string,TS會因為型別不同而報錯
}; 

//錯誤寫法 2 :
student = {
	name: "Judy",
	id: 123 //將phoneNum更改為id,屬性與原先物件定義不同,即便型別一致,TS也會報錯
};

可選屬性

有時候,物件裡的屬性不一定要填寫,這時候要在屬性後加上?,將其更改為可選屬性

let student: {
	name : string;
	club? : string;
};

student = {
	name: "Owen" //假設這個物件沒有參加社團,只寫一個屬性也不會報錯
};
  • 若是club不賦值的話,此刻它的值是甚麼?
    • 若可選屬性沒有填寫的話,它的值會是undefined,畢竟沒有填寫相當於不存在嘛!

唯讀屬性

若希望物件中的某個屬性在賦值後保持不更動的狀態,可以在屬性前加上readonly,使其變更為唯讀屬性

let student: {
	name: string;
	readonly id: number;
};

student ={
	name: "Judy",
	id: 123
};

//假設我試圖修改id的值:
student.id =  456; //此時TS會因為唯讀屬性的關係而報錯

小結

物件型別的應用多變又靈活,除了今天介紹的物件外,明天會先介紹陣列,之後還會連接到聯合型別、型別別名或函式等等。

最後,來統整一下今天關於物件的介紹吧!

  • 物件型別宣告方式:用 { key: type } 來限制物件裡的屬性與型別。

  • 可選屬性:屬性名稱後加問號,代表這個資料可寫可不寫(不寫會變成undefined)。

  • 唯讀屬性 (readonly):屬性前加readonly,建立後無法再修改它的值。

今天就到這邊,大家明天見!


上一篇
[Day-4]基本型別
下一篇
[Day-6]陣列x元組
系列文
從零開始學習TypeScript:菜鳥的入門介紹與概覽22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言